assume cs:code, ds:data, ss:stack

data segment
    db "Beginner's All-purpose Symbolic Instruction Code.", 0
data ends

stack segment stack
    db 16 dup(0)
stack ends

code segment
begin:
    ; 初始化操作
    mov ax, data
    mov ds, ax
    mov ax, stack
    mov ss, ax
    mov sp, 16
    call letterc

zero:
    ; 主函数返回
    mov ax, 4c00H
    int 21H

letterc:
    ; 小写字母ascii的范围是97-122
    mov ch, 0
upper:
    mov cl, ds:[bx]     ; 把要比较的字符放置于cl之中
    ; 若字符在97和122之外，则跳转
    cmp cl, 97
    jb notAchar
    cmp cl, 122
    ja notAchar
    ; 如果没有发生跳转，则证明是a-z之间的字符，则需要进行大写处理
    mov al, cl
    and al, 11011111B
    mov ds:[bx], al
notAchar:
    inc bx              ; bx加一，则指向下一个字符
    jcxz zero           ; 遇到0则函数跳转, 函数结束
    jmp upper           ; 否则循环继续

code ends

end begin